/*
        1
       /  \
      2    3
     / \  / \
    4  5 6   7
    Level Order Traversal: 1 2 3 4 5 6 7
*/

#include<iostream>
#include<vector>
#include<queue>

using namespace std;

struct node
{
    int data;
    struct node *left,*right;
};

struct node* newNode(int data)
{
    struct node* ptr = new node();
    ptr->data = data;
    ptr->left = NULL;
    ptr->right = NULL; 
    return (ptr);
}

void levelOrder(node* root)
{
           
    queue<node*> q;
    if(root == NULL)
        return;
    q.push(root);
    while(!q.empty())
    {
        vector<int> temp;
        int size = q.size();
        for(int i=0;i<size;i++)
        {
            node* node = q.front();
            q.pop(); 
            cout<<node->data<<" ";                        
            if (node->left != NULL)
                q.push(node->left);            
            if (node->right != NULL)
                q.push(node->right);
        }        
    }   
}

int main()
{
    struct node* root = newNode(1);    
    root->left = newNode(2);    
    root->left->left = newNode(4);
    root->left->right = newNode(5);
    root->left->left->left = newNode(4);
    root->left->right->right = newNode(6);
    levelOrder(root);   
    return 0;
}
